#ifndef FICHE_H_INCLUDED
#define FICHE_H_INCLUDED

#include <stdlib.h>

#define TAILLE_STRING_LABEL 30
#define TAILLE_STRING_DESCRIPTION 500
#define TAILLE_STRING_OBJECTIF 100
#define TAILLE_STRING_RECOMPENSE 100

struct Fiche
{
    int quest;
    int etape;
    char label[TAILLE_STRING_LABEL];
    char description[TAILLE_STRING_DESCRIPTION];
    char objectif[TAILLE_STRING_OBJECTIF];
    // Ajouter la structure Objectif
    char recompense[TAILLE_STRING_RECOMPENSE];
    // Ajouter la structure recompense

    struct Fiche* precedent;
    struct Fiche* suivant;
    struct Fiche* secondaire; // Pour la structure de liste - Designe aussi les quetes secondaires au meme niveau
};
typedef struct Fiche Fiche;

Fiche* nouvelle_fiche();
void supprimer_fiche(Fiche* fiche); // Ne reindexe pas
void supprimer_quete(Fiche* fiche); // Ne reindexe pas
void supprimer_fiches(Fiche* fiches);
Fiche* get_fiche(Fiche* fiches, int quest, int etape);

// Reindexation faite
// 0 si erreur , 1 sinon
int ajouter_quete_secondaire_by_id(Fiche* fiches, int quest, int etape, Fiche* fiche);
int ajouter_etape_avant_by_id(Fiche** fiches, int quest, int etape, Fiche* fiche);
int ajouter_etape_apres_by_id(Fiche* fiches, int quest, int etape, Fiche* fiche);
int changer_pere_by_id(Fiche* fiches, int quest, int p_quest, int p_etape);
int supprimer_fiche_by_id(Fiche** fiches, int quest, int etape);
int supprimer_quete_by_id(Fiche* fiches, int quest);

// Reindexation non faite
void ajouter_quete_secondaire(Fiche* pere, Fiche* fiche);
void ajouter_quete_secondaire_fin(Fiche* pere, Fiche* fiche);
void ajouter_etape_avant(Fiche* curseur, Fiche* fiche);
void ajouter_etape_apres(Fiche* curseur, Fiche* fiche);


void reindexer_etapes_quetes(Fiche* fiches);
void r_reindexer_etapes_quetes(Fiche* fiches, int quete, int etape, int* quete_max);


#endif // FICHE_H_INCLUDED
